/**
 * 通用uni-app网络请求
 * 基于 Promise 对象实现更简单的 request 使用方式，支持请求和响应拦截
 */
import setting from "./config.js";

export default {
  config: {
    baseURL: setting.IS_DEV ? setting.DEV_URL : setting.PRO_URL,
    // header: {
    // 	'Content-Type':'application/json',
    // 	'Content-Type':'application/x-www-form-urlencoded'
    // },
    custom: {
      // 请求接口展示Loading
      ShowLoading: setting.SHOW_LOADING,
      // Loading中是否遮罩
      LoadingMask: false,
      // Loading文本
      LoadingText: setting.LOADING_TEXT,
    },
    dataType: "json" /* 如设为json，会对返回的数据做一次 JSON.parse */,
    responseType: "text",
    // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
    timeout: setting.TIMEOUT,
    // #endif
    // #ifdef APP-PLUS
    // 验证 ssl 证书 仅5+App安卓端支持（HBuilderX 2.3.3+）
    sslVerify: false,
    // #endif
    // #ifdef H5
    // 跨域请求时是否携带凭证（cookies）仅H5支持（HBuilderX 2.6.15+）
    withCredentials: false,
    // #endif
    // #ifdef APP-PLUS
    // DNS解析时优先使用ipv4 仅 App-Android 支持 (HBuilderX 2.8.0+)
    firstIpv4: false,
    // #endif
  },
  get(url, data, options) {
    if (!options) {
      options = {};
    }
    options.url = url;
    options.data = data;
    options.method = "GET";
    return this.request(options);
  },
  post(url, data, options) {
    if (!options) {
      options = {};
    }
    options.url = url;
    options.data = data;
    options.method = "POST";
    return this.request(options);
  },
  request(options) {
    //请求前处理，相当于请求拦截
    let config = Object.assign(this.config, options); //合并全局配置及局部配置项
    //加载提示
    if (config.custom.ShowLoading) {
      uni.showLoading({
        title: config.custom.LoadingText || "正在加载",
        mask: config.custom.LoadingMask,
      });
    }
    config.url = config.baseURL + config.url;
    config.data = Object.assign({}, config.data);

    //如果token不为空则请求时携带token
    let _token = uni.getStorageSync("__token__") || "";
    if (_token) {
      config.data["token"] = _token;
    } 
    config.data["timestamp"] = Math.round(new Date() / 1000); //时间戳;

    //是否开启请求日志
    if (setting.REQUEST_LOG) {
      _reqlog(config);
    }
    return new Promise((resolve, reject) => {
      uni.request(config).then((res) => {
        //结束loading提示
        if (config.custom.ShowLoading) {
          uni.hideLoading();
        }
        //是否开启响应日志
        if (setting.REQUEST_LOG) {
          _reslog(res);
        }

        //请求成功，状态码200
        if (res.statusCode === 200) {
          let result = res.data;
          // if 与后台规定code代码进行处理数据返回
          if (result.code === 0) {
            //后台约定code1为请求成功
            resolve(result);
          } else if (result.code === 2) {
            //后台约定code2为用户被锁定
            uni.showToast({
              title: "当前未登录",
              icon: "none",
            });
            //转入登录页
            setTimeout(function () {
              uni.reLaunch({
                url: "/pages/login/index",
              });
            }, 1000);
          } else if (setting.CATCH_MESS) {
            if (!_token) { 
              uni.redirectTo({
                url:'/pages/login/index'
              })
            } else {
              uni.showToast({
                title: result.msg,
                icon: "none",
              });
            }
           
         
          }
        } else {
          //状态码不是200
          uni.showToast({
            title: `请求出错${res.statusCode}`,
            icon: "none",
          });
        }
      });
    });
  },
};
/**
 * 请求接口日志记录
 */
//请求日志
function _reqlog(req) {
  console.log(`请求地址：${req.url}`);
  console.log(`请求参数：${JSON.stringify(req.data)}`);
}
//响应日志
function _reslog(res) {
  console.log(`响应结果：${JSON.stringify(res)}`);
}
